/*     */ package com.zimbra.cs.html;
/*     */ 
/*     */ import com.zimbra.common.util.ByteUtil;
/*     */ import com.zimbra.common.util.Log;
/*     */ import com.zimbra.common.util.ZimbraLog;
/*     */ import java.io.File;
/*     */ import java.io.IOException;
/*     */ import java.io.PrintStream;
/*     */ import java.io.PrintWriter;
/*     */ import java.io.StringReader;
/*     */ import java.io.StringWriter;
/*     */ import java.util.HashMap;
/*     */ import java.util.Map;
/*     */ import org.apache.xerces.xni.Augmentations;
/*     */ import org.apache.xerces.xni.QName;
/*     */ import org.apache.xerces.xni.XMLAttributes;
/*     */ import org.apache.xerces.xni.XMLString;
/*     */ import org.apache.xerces.xni.XNIException;
/*     */ import org.apache.xerces.xni.parser.XMLDocumentFilter;
/*     */ import org.apache.xerces.xni.parser.XMLInputSource;
/*     */ import org.apache.xerces.xni.parser.XMLParserConfiguration;
/*     */ import org.cyberneko.html.HTMLConfiguration;
/*     */ import org.cyberneko.html.filters.DefaultFilter;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class HtmlDetag
/*     */   extends DefaultFilter
/*     */ {
/*     */   public void comment(XMLString text, Augmentations augs)
/*     */     throws XNIException
/*     */   {}
/*     */   
/*     */   public void startElement(QName element, XMLAttributes attributes, Augmentations augs)
/*     */     throws XNIException
/*     */   {}
/*     */   
/*     */   public void endElement(QName element, Augmentations augs)
/*     */     throws XNIException
/*     */   {}
/*     */   
/*     */   public void emptyElement(QName element, XMLAttributes attributes, Augmentations augs)
/*     */     throws XNIException
/*     */   {}
/*     */   
/*     */   private static class UnescapeWriter
/*     */     extends org.cyberneko.html.filters.Writer
/*     */   {
/*  89 */     private static final Map<String, Integer> entityMap = new HashMap();
/*     */     
/*  91 */     static { entityMap.put("quot", Integer.valueOf(34));
/*  92 */       entityMap.put("amp", Integer.valueOf(38));
/*  93 */       entityMap.put("apos", Integer.valueOf(39));
/*  94 */       entityMap.put("frasl", Integer.valueOf(47));
/*  95 */       entityMap.put("lt", Integer.valueOf(60));
/*  96 */       entityMap.put("gt", Integer.valueOf(62));
/*  97 */       entityMap.put("ndash", Integer.valueOf(150));
/*  98 */       entityMap.put("mdash", Integer.valueOf(151));
/*  99 */       entityMap.put("nbsp", Integer.valueOf(160));
/* 100 */       entityMap.put("iexcl", Integer.valueOf(161));
/* 101 */       entityMap.put("cent", Integer.valueOf(162));
/* 102 */       entityMap.put("pound", Integer.valueOf(163));
/* 103 */       entityMap.put("curren", Integer.valueOf(164));
/* 104 */       entityMap.put("yen", Integer.valueOf(165));
/* 105 */       entityMap.put("brvbar", Integer.valueOf(166));
/* 106 */       entityMap.put("brkbar", Integer.valueOf(166));
/* 107 */       entityMap.put("sect", Integer.valueOf(167));
/* 108 */       entityMap.put("uml", Integer.valueOf(168));
/* 109 */       entityMap.put("die", Integer.valueOf(168));
/* 110 */       entityMap.put("copy", Integer.valueOf(169));
/* 111 */       entityMap.put("ordf", Integer.valueOf(170));
/* 112 */       entityMap.put("laquo", Integer.valueOf(171));
/* 113 */       entityMap.put("not", Integer.valueOf(172));
/* 114 */       entityMap.put("shy", Integer.valueOf(173));
/* 115 */       entityMap.put("reg", Integer.valueOf(174));
/* 116 */       entityMap.put("macr", Integer.valueOf(175));
/* 117 */       entityMap.put("hibar", Integer.valueOf(175));
/* 118 */       entityMap.put("deg", Integer.valueOf(176));
/* 119 */       entityMap.put("plusmn", Integer.valueOf(177));
/* 120 */       entityMap.put("sup2", Integer.valueOf(178));
/* 121 */       entityMap.put("sup3", Integer.valueOf(179));
/* 122 */       entityMap.put("acute", Integer.valueOf(180));
/* 123 */       entityMap.put("micro", Integer.valueOf(181));
/* 124 */       entityMap.put("para", Integer.valueOf(182));
/* 125 */       entityMap.put("middot", Integer.valueOf(183));
/* 126 */       entityMap.put("cedil", Integer.valueOf(184));
/* 127 */       entityMap.put("sup1", Integer.valueOf(185));
/* 128 */       entityMap.put("ordm", Integer.valueOf(186));
/* 129 */       entityMap.put("raquo", Integer.valueOf(187));
/* 130 */       entityMap.put("frac14", Integer.valueOf(188));
/* 131 */       entityMap.put("frac12", Integer.valueOf(189));
/* 132 */       entityMap.put("frac34", Integer.valueOf(190));
/* 133 */       entityMap.put("iquest", Integer.valueOf(191));
/* 134 */       entityMap.put("Agrave", Integer.valueOf(192));
/* 135 */       entityMap.put("Aacute", Integer.valueOf(193));
/* 136 */       entityMap.put("Acirc", Integer.valueOf(194));
/* 137 */       entityMap.put("Atilde", Integer.valueOf(195));
/* 138 */       entityMap.put("Auml", Integer.valueOf(196));
/* 139 */       entityMap.put("Aring", Integer.valueOf(197));
/* 140 */       entityMap.put("AElig", Integer.valueOf(198));
/* 141 */       entityMap.put("Ccedil", Integer.valueOf(199));
/* 142 */       entityMap.put("Egrave", Integer.valueOf(200));
/* 143 */       entityMap.put("Eacute", Integer.valueOf(201));
/* 144 */       entityMap.put("Ecirc", Integer.valueOf(202));
/* 145 */       entityMap.put("Euml", Integer.valueOf(203));
/* 146 */       entityMap.put("Igrave", Integer.valueOf(204));
/* 147 */       entityMap.put("Iacute", Integer.valueOf(205));
/* 148 */       entityMap.put("Icirc", Integer.valueOf(206));
/* 149 */       entityMap.put("Iuml", Integer.valueOf(207));
/* 150 */       entityMap.put("ETH", Integer.valueOf(208));
/* 151 */       entityMap.put("Ntilde", Integer.valueOf(209));
/* 152 */       entityMap.put("Ograve", Integer.valueOf(210));
/* 153 */       entityMap.put("Oacute", Integer.valueOf(211));
/* 154 */       entityMap.put("Ocirc", Integer.valueOf(212));
/* 155 */       entityMap.put("Otilde", Integer.valueOf(213));
/* 156 */       entityMap.put("Ouml", Integer.valueOf(214));
/* 157 */       entityMap.put("times", Integer.valueOf(215));
/* 158 */       entityMap.put("Oslash", Integer.valueOf(216));
/* 159 */       entityMap.put("Ugrave", Integer.valueOf(217));
/* 160 */       entityMap.put("Uacute", Integer.valueOf(218));
/* 161 */       entityMap.put("Ucirc", Integer.valueOf(219));
/* 162 */       entityMap.put("Uuml", Integer.valueOf(220));
/* 163 */       entityMap.put("Yacute", Integer.valueOf(221));
/* 164 */       entityMap.put("THORN", Integer.valueOf(222));
/* 165 */       entityMap.put("szlig", Integer.valueOf(223));
/* 166 */       entityMap.put("agrave", Integer.valueOf(224));
/* 167 */       entityMap.put("aacute", Integer.valueOf(225));
/* 168 */       entityMap.put("acirc", Integer.valueOf(226));
/* 169 */       entityMap.put("atilde", Integer.valueOf(227));
/* 170 */       entityMap.put("auml", Integer.valueOf(228));
/* 171 */       entityMap.put("aring", Integer.valueOf(229));
/* 172 */       entityMap.put("aelig", Integer.valueOf(230));
/* 173 */       entityMap.put("ccedil", Integer.valueOf(231));
/* 174 */       entityMap.put("egrave", Integer.valueOf(232));
/* 175 */       entityMap.put("eacute", Integer.valueOf(233));
/* 176 */       entityMap.put("ecirc", Integer.valueOf(234));
/* 177 */       entityMap.put("euml", Integer.valueOf(235));
/* 178 */       entityMap.put("igrave", Integer.valueOf(236));
/* 179 */       entityMap.put("iacute", Integer.valueOf(237));
/* 180 */       entityMap.put("icirc", Integer.valueOf(238));
/* 181 */       entityMap.put("iuml", Integer.valueOf(239));
/* 182 */       entityMap.put("eth", Integer.valueOf(240));
/* 183 */       entityMap.put("ntilde", Integer.valueOf(241));
/* 184 */       entityMap.put("ograve", Integer.valueOf(242));
/* 185 */       entityMap.put("oacute", Integer.valueOf(243));
/* 186 */       entityMap.put("ocirc", Integer.valueOf(244));
/* 187 */       entityMap.put("otilde", Integer.valueOf(245));
/* 188 */       entityMap.put("ouml", Integer.valueOf(246));
/* 189 */       entityMap.put("divide", Integer.valueOf(247));
/* 190 */       entityMap.put("oslash", Integer.valueOf(248));
/* 191 */       entityMap.put("ugrave", Integer.valueOf(249));
/* 192 */       entityMap.put("uacute", Integer.valueOf(250));
/* 193 */       entityMap.put("ucirc", Integer.valueOf(251));
/* 194 */       entityMap.put("uuml", Integer.valueOf(252));
/* 195 */       entityMap.put("yacute", Integer.valueOf(253));
/* 196 */       entityMap.put("thorn", Integer.valueOf(254));
/* 197 */       entityMap.put("yuml", Integer.valueOf(255));
/*     */     }
/*     */     
/*     */     public UnescapeWriter(java.io.Writer writer, String encoding) {
/* 201 */       super(encoding);
/*     */     }
/*     */     
/*     */     protected void printEntity(String name) {
/* 205 */       Integer num = (Integer)entityMap.get(name);
/* 206 */       if (num != null) {
/* 207 */         this.fPrinter.print((char)num.intValue());
/*     */       } else {
/* 209 */         this.fPrinter.print("?");
/*     */       }
/* 211 */       this.fPrinter.flush();
/*     */     }
/*     */   }
/*     */   
/*     */   public String detag(String html) {
/* 216 */     StringWriter out = new StringWriter();
/* 217 */     UnescapeWriter writer = new UnescapeWriter(out, "utf-8");
/* 218 */     XMLDocumentFilter[] filters = { this, writer };
/*     */     
/* 220 */     XMLParserConfiguration parser = new HTMLConfiguration();
/* 221 */     parser.setProperty("http://cyberneko.org/html/properties/filters", filters);
/* 222 */     parser.setProperty("http://cyberneko.org/html/properties/names/elems", "match");
/* 223 */     parser.setFeature("http://cyberneko.org/html/features/balance-tags", false);
/* 224 */     parser.setFeature("http://xml.org/sax/features/namespaces", false);
/*     */     
/* 226 */     XMLInputSource source = new XMLInputSource(null, null, null, new StringReader(html), null);
/*     */     try {
/* 228 */       parser.parse(source);
/*     */     } catch (Exception x) {
/* 230 */       ZimbraLog.misc.warn("Can't detag HTML [" + html + "]");
/*     */     }
/* 232 */     return out.toString();
/*     */   }
/*     */   
/*     */   public static void main(String[] args) throws IOException {
/* 236 */     String html = new String(ByteUtil.getContent(new File(args[0])));
/* 237 */     System.out.println(new HtmlDetag().detag(html));
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/html/HtmlDetag.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */